const app = getApp()
Page({
  /**
   * 页面的初始数据
   */
  data: {
    userInfo: {},
    openid:'',
    startTime:' ',//开始时间
    start_ok:false,
    top_txt:"等待开始",
    start_value_suspend_bot:false,
    start_value_suspend_txt:"暂停",//暂停文本，后续点击暂停替换成开始
    tool_time:{//时间参数
      "hour":"0",
      "minute":"0",
      "second":"0"
    },
    tool_speed:"0",
    tool_consume:"0",
    time_start:' ',//计时器函数
    mileage_value:"0.00",//里程数
    mileage_bot:false,//里程开始计算判断值
    mileage_nd:{
      "latitude":"0",
      "longitude":"0",
    },
    time_mileage:" "//里程数计时函数
  },
  /**
   * 生命周期函数--监听页面加载
   */
  timeFormat(date){//时间格式化
    var year = date.getFullYear()
    var month = date.getMonth() + 1
    var day = date.getDate()
    var hour = date.getHours()
    var minute = date.getMinutes()
    var second = date.getSeconds()
    return [year, month, day].join('/') + ' ' + [hour, minute, second].join(':');
  },
  appinfo:function(lat1, lng1, lat2, lng2) {
    lat1 = lat1 || 0;    
    lng1 = lng1 || 0;    
    lat2 = lat2 || 0;    
    lng2 = lng2 || 0;    
    var rad1 = lat1 * Math.PI / 180.0;    
    var rad2 = lat2 * Math.PI / 180.0;    
    var a = rad1 - rad2;    
    var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;    
    var r = 6378137;    
    return (r * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos(rad2) * Math.pow(Math.sin(b / 2), 2)))).toFixed(0)
  },
  time_start_function(){//时间计时函数，每秒调用一次
    var taht = this;
    taht.data.time_start = setInterval(()=>{
      taht.setData({
        tool_time:{
          "hour":taht.data.tool_time.minute == 60?parseInt(taht.data.tool_time.hour)+1:taht.data.tool_time.hour,//小时
          "minute":taht.data.tool_time.minute==60?"0":taht.data.tool_time.second == 60?parseInt(taht.data.tool_time.minute)+1:taht.data.tool_time.minute,//分钟
          "second":taht.data.tool_time.second == 60? "0" :parseInt(taht.data.tool_time.second)+1,//秒
        }
      })
    },1000)
  },
  time_mileage_function(){//里程计算定时器，每10秒调用一次
    var taht = this;
    taht.data.time_mileage = setInterval(()=>{
      if(taht.data.mileage_bot){
          wx.getLocation({
            type: 'gcj02', // 返回可以用于wx.openLocation的经纬度
            success(res) {
              taht.setData({
                mileage_value:parseInt(taht.appinfo(res.latitude,res.longitude,taht.data.mileage_nd.latitude,taht.data.mileage_nd.longitude)/1000).toFixed(2)
              })
              taht.setData({
                mileage_nd:{
                  "latitude":res.latitude,
                  "longitude":res.longitude,
                }
              })
              console.log(taht.data.mileage_value);
            }
          })
      }else{
        wx.getLocation({
          type: 'gcj02', // 返回可以用于wx.openLocation的经纬度
          success(res) {
            taht.setData({
              mileage_nd:{
                "latitude":res.latitude,
                "longitude":res.longitude,
              }
            })
          }
        })
      }
      taht.setData({
        mileage_bot:taht.data.mileage_bot?true:true
      })
    },10000)
    
  },
  start_function(){//开始运动
    if(!this.data.start_value_suspend_bot){
      this.time_start_function();
      this.time_mileage_function();
    }
    this.setData({
      startTime:this.timeFormat(new Date()),
      top_txt:"运动中",
      start_value_suspend_bot:true,
      start_ok :true
    });
  },
  start_value_suspend_function(){//计时器暂停继续
    if(!this.data.start_value_suspend_bot){
      this.time_start_function();
      this.time_mileage_function();
    }else{
      clearInterval(this.data.time_start);//关闭计时器
      clearInterval(this.data.time_mileage);
    }
    this.setData({//设置暂停值
      start_value_suspend_bot:!this.data.start_value_suspend_bot
    });
    this.setData({//设置文本
      start_value_suspend_txt:this.data.start_value_suspend_bot?"暂停":"继续",
      top_txt:this.data.start_value_suspend_bot?"运动中":"暂停"
    });
  },
  start_value_stop_function(e){//停止计时
    var taht = this;
    wx.showModal({//弹出提示框
      title: '提示',
      content: '是否停止运动？',
      success: function(res) {
        if (res.confirm) {
          if(taht.data.tool_time.minute >= 1){
            taht.submitTemplateMessageForm(e,taht.data.mileage_value,taht.data.tool_time,taht.data.tool_speed,taht.data.tool_consume);//向微信发送通知
            taht.cloudonAdd(taht.data.startTime,taht.data.mileage_value,taht.data.tool_time,taht.data.tool_speed,taht.data.tool_consume);//把运动信息写入数据库
          }else{
            wx.showToast({
              icon: 'none',
              title: '运动不满1分钟，不及计算！'
            })
          }
          taht.setData({
            top_txt:"等待开始",
            start_ok :false,
            startTime:" ",
            start_value_suspend_bot:false,
            start_value_suspend_txt:"暂停",
            tool_time:{
              "hour":"0",
              "minute":"0",
              "second":"0"
            },
            mileage_bot:false,
            mileage_nd:{
              "latitude":"0",
              "longitude":"0",
            }
          });
          clearInterval(taht.data.time_start);
          clearInterval(taht.data.time_mileage);//关闭计时器
        } else if (res.cancel) {
          console.log('用户点击取消')
        }
      }
    })
  },
  submitTemplateMessageForm(e,mileage_value,tool_time,tool_speed,tool_consume){//结束后发送给微信通知
    wx.cloud.callFunction({
      name: 'queryData',
      data: {
        action: 'sendTemplateMessage',
        formId: e.detail.formId,
        dataSet:{
          keyword1: {
            value: mileage_value + "km",
          },
          keyword2: {
            value: (tool_time.hour >=1?tool_time.hour + "小时":" ") + tool_time.minute + "分钟" + tool_time.second + "秒",
          },
          keyword3: {
            value: tool_speed + '/km',
          },
          keyword4: {
            value: tool_consume + '卡',
          },
        }
      },
      success: res => {
        console.warn('[云函数] [openapi] templateMessage.send 调用成功：', res)
        wx.showModal({
          title: '发送成功',
          content: '请返回微信主界面查看',
          showCancel: false,
        })
        // wx.showToast({
        //   title: '发送成功，请返回微信主界面查看',
        // })
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '调用失败',
        })
        console.error('[云函数] [openapi] templateMessage.send 调用失败：', err)
      }
    })
  },
  cloudonAdd(startTime,mileage_value,tool_time,tool_speed,tool_consume){
    wx.cloud.init();
    const db = wx.cloud.database();
    // 查询当前用户所有的 counters
      db.collection('counters').where({
        _openid:this.data.openid
      }).get({
        success: res => {
          console.log("开始时间 - ",startTime);
          console.log('[数据库] [查询记录] 成功: ', res.data.length)
          var newData = {
              "startTime":startTime, //开始运动时间
              "EndTime":this.timeFormat(new Date()),//结束运动时间
              "mileage":mileage_value + "km",//运动里程
              "time":(tool_time.hour >=1?tool_time.hour + "小时":" ") + tool_time.minute + "分钟" + tool_time.second + "秒",//运动时间
              "speed":tool_speed + "/km",//运动速度
              "consume":tool_consume + "千卡"//运动消耗
          }
          if(res.data.length){
            console.log("进入更新");
            this.onCounterInc(res.data[0]._id,newData);
          }else{
            console.log("进入创建");
            this.onAdd(newData);
          }
        },
        fail: err => {
          wx.showToast({
            icon: 'none',
            title: '查询记录失败'
          })
          console.error('[数据库] [查询记录] 失败：', err)
        }
      })
  },
  onAdd: function (newData) {//新增数据
    const db = wx.cloud.database()
    db.collection('counters').add({
      data: {
        motionList:[newData]
      },
      success: res => {
        // 在返回结果中会包含新创建的记录的 _id
        wx.showToast({
          title: '新增记录成功',
        })
        console.log('[数据库] [新增记录] 成功，记录 _id: ', res._id)
      },
      fail: err => {
        wx.showToast({
          icon: 'none',
          title: '新增记录失败'
        })
        console.error('[数据库] [新增记录] 失败：', err)
      }
    })
  },
  onCounterInc: function(res,newData) {//更新数据
    const db = wx.cloud.database()
    const _ = db.command;
    db.collection('counters').doc(res).update({
      data: {
        motionList:_.unshift(newData)
      },
      success: res => {
        console.log("成功");
      },
      fail: err => {
        icon: 'none',
        console.error('[数据库] [更新记录] 失败：', err)
      }
    })
  },
  onLoad: function (options) {
    console.log(this.timeFormat(new Date()));
    wx.cloud.init()
    app.openidCallback = res => {
      this.setData({
        openid:res
      });
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    
  }
})